package br.com.jw.controle.produto;

import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Locale;
import br.com.jw.adapter.ProdutoSelecionadosAdapter;
import br.com.jw.controle.cliente.ListarCliente;
import br.com.jw.controle.login.R;
import br.com.jw.dao.VendaDao;
import br.com.jw.modelo.Cliente;
import br.com.jw.modelo.Produto;
import br.com.jw.modelo.Usuario;
import br.com.jw.modelo.Venda;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class ListarProdutosSelecionados extends Activity {
	NumberFormat nf = NumberFormat.getCurrencyInstance(new Locale("pt", "BR"));
	TextView tvNomeCliente, tvTotalDaVenda, tvInformacao;
	Button btAlterarQtde;
	EditText etQtdeProduto;
	ArrayList<Produto> listaProdutosSelecionados;
	ProdutoSelecionadosAdapter produtoSelecionadoAdapter;
	Intent intent;
	ListView list;
	Cliente cliente;
	Usuario usuarioLogado;
	Venda venda;
	VendaDao vendaDao;
	Produto produto;
	double somatorio=0;
	
	@SuppressWarnings("unchecked")
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.listar_produtos_selecionados);

		inicializarComponentes();
		//usuario logado no sistema
		usuarioLogado = Usuario.getInstance();
		
		vendaDao = new VendaDao(getApplicationContext());
		cliente = new Cliente();
		list = (ListView) findViewById(R.id.lvProdutosSelecionados);
		registerForContextMenu(list);

		intent = getIntent();

		if (intent != null) {
			cliente = (Cliente) intent.getSerializableExtra("cliente");
			if (cliente != null) {
				tvNomeCliente.setText(cliente.getCli_nome());
			}
			listaProdutosSelecionados = (ArrayList<Produto>) intent
					.getSerializableExtra("produto");
			produtoSelecionadoAdapter = new ProdutoSelecionadosAdapter(
					ListarProdutosSelecionados.this, listaProdutosSelecionados);
			list.setAdapter(produtoSelecionadoAdapter);
		}
		for(int i=0; i< listaProdutosSelecionados.size();i++){
			 somatorio+= listaProdutosSelecionados.get(i).getPro_QtdeProdutoSelecionado() * 
					 listaProdutosSelecionados.get(i).getPro_valor();
		}
		String aux = nf.format(somatorio);
 		tvTotalDaVenda.setText(aux);
 		
		list.setOnItemClickListener(onItemClick);
	}

	OnItemClickListener onItemClick = new OnItemClickListener() {

		public void onItemClick(AdapterView<?> arg0, View view, int position,
				long index) {
			openContextMenu(view);
			// pega o item clicado
			produto = listaProdutosSelecionados.get(position);

			btAlterarQtde.setOnClickListener(new View.OnClickListener() {

				public void onClick(View view) {
					String aux = etQtdeProduto.getText().toString();
					if(produto.getPro_qtde() < Integer.parseInt(aux)){
						mensagem("Quantidade em estoque "+produto.getPro_qtde()+" unidade(s)");
						return;
					}else{
					produto.setPro_QtdeProdutoSelecionado(Integer.parseInt(aux));

					produtoSelecionadoAdapter.notifyDataSetChanged();
                    produtoSelecionadoAdapter.atualizarLista(tvTotalDaVenda);
					
					etQtdeProduto.setVisibility(View.GONE);
					btAlterarQtde.setVisibility(View.GONE);
					tvInformacao.setVisibility(View.VISIBLE);
				}
				}
			});
		}
	};

	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {
		super.onCreateContextMenu(menu, v, menuInfo);
		MenuInflater inflater = getMenuInflater();
		inflater.inflate(R.menu.context_menu_produtos_selecionados, menu);
	}

	
	public boolean onContextItemSelected(MenuItem item) {
		// AdapterContextMenuInfo info = (AdapterContextMenuInfo)
		// item.getMenuInfo();
		switch (item.getItemId()) {
		case R.id.alterarQtdeProdutoSelecionado:
			
			tvInformacao.setVisibility(View.GONE);
			etQtdeProduto.setVisibility(View.VISIBLE);
			btAlterarQtde.setVisibility(View.VISIBLE);
			etQtdeProduto.setText(String.valueOf(produto
					.getPro_QtdeProdutoSelecionado()));
			return true;

		case R.id.excluirProdutoSelecionado:
            listaProdutosSelecionados.remove(produto);
            produtoSelecionadoAdapter.atualizarLista(tvTotalDaVenda);
            produtoSelecionadoAdapter.notifyDataSetChanged();
			return true;

		case R.id.finalizarVenda:
			venda = new Venda();
			boolean resultado =false;
            for(int i=0; i<listaProdutosSelecionados.size();i++){
            	venda.setVen_cli_id(cliente.getCli_id());
            	venda.setVen_usu_id(usuarioLogado.getUsu_id());
            	venda.setVen_pro_id(listaProdutosSelecionados.get(i).getPro_id());  
            	venda.setVen_pro_qtde(listaProdutosSelecionados.get(i).getPro_QtdeProdutoSelecionado());
            	
            	resultado=vendaDao.salvarVenda(venda);
            }
            	if(resultado == true){
            		mensagem("Venda salva com sucesso");
            		
            	}else{
            		mensagem("Erro ao salvar venda");
            		
            	}          	
            
            	intent = new Intent(ListarProdutosSelecionados.this,ListarCliente.class);
            	startActivity(intent);
			return true;

		case R.id.cancelarProdutoSelecionado:
            
			return true;

		default:
			return super.onContextItemSelected(item);
		}
	}

	public void mensagem(String msg) {
		Toast.makeText(ListarProdutosSelecionados.this, msg, Toast.LENGTH_SHORT)
				.show();
	}

	public void inicializarComponentes() {
		tvNomeCliente = (TextView) findViewById(R.id.tvNomeCliente);
		tvTotalDaVenda = (TextView) findViewById(R.id.tvTotalDaVenda);
		etQtdeProduto = (EditText) findViewById(R.id.etQtdeProduto);
		etQtdeProduto.setVisibility(View.GONE);
		tvInformacao = (TextView) findViewById(R.id.tvInformacao);
		btAlterarQtde = (Button) findViewById(R.id.btAlterarQtde);
		btAlterarQtde.setVisibility(View.GONE);

	}

	public void onBackPressed() {
		super.onBackPressed();
		intent = new Intent(ListarProdutosSelecionados.this,
				ListarProduto.class);
		intent.putExtra("produto", listaProdutosSelecionados);
		intent.putExtra("cliente", cliente);
		startActivity(intent);
	

	}
}
